/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.rs.service;

import com.xy.biz.rs.domain.bo.RecordTemplateBO;
import com.xy.biz.rs.domain.bo.RecordTemplateGroupBO;
import com.xy.biz.rs.domain.bo.RecordTemplateItemBO;
import com.xy.biz.rs.domain.query.RecordTemplateByIdQuery;
import com.xy.biz.rs.domain.query.RecordTemplateQuery;
import com.xy.biz.rs.domain.req.GetRecordTemplateGroupRequest;
import com.xy.biz.rs.domain.req.GetRecordTemplateRequest;
import com.xy.biz.rs.domain.req.UpdateRecordTemplateSequenceRequest;
import com.xy.biz.rs.domain.req.UpdateRecordTemplateStatusRequest;
import com.xy.biz.rs.domain.resp.GetRecordTemplateGroupResponse;
import com.xy.lang.domain.Result;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.util.List;
import java.util.Map;

/**
 *
 *
 * @author zsp
 * @date 2022-1-4
 */
public interface RecordTemplateService {

    /**
     * 保存
     *
     * @param recordTemplateBO
     */
    Result<?> saveRecordTemplate(RecordTemplateBO recordTemplateBO);

    /**
     * 更新
     *
     * @param recordTemplateBO
     */
    Result<?> updateRecordTemplate(RecordTemplateBO recordTemplateBO);

    /**
     * 删除
     *
     * @param recordTemplateId
     */
    Result<?> deleteRecordTemplate(Long recordTemplateId);

    /**
     * 查找一个
     *
     * @param query
     * @return
     */
    RecordTemplateBO getRecordTemplate(RecordTemplateByIdQuery query);

    /**
     * 查找多个
     *
     * @param query 查找条件
     */
    List<RecordTemplateBO> listRecordTemplate(RecordTemplateQuery query);

    /**
     * 统计个数
     *
     * @param query 查找条件
     */
    int countRecordTemplate(RecordTemplateQuery query);

    /**
     *
     * @param request
     * @return
     */
    Result<?> updateRecordTemplateForStatus(UpdateRecordTemplateStatusRequest request);

    /**
     * 保存
     *
     * @param recordTemplateGroupBO
     */
    Result<?> saveRecordTemplateGroup(RecordTemplateGroupBO recordTemplateGroupBO);

    /**
     * 更新
     *
     * @param recordTemplateGroupBO
     */
    Result<?> updateRecordTemplateGroup(RecordTemplateGroupBO recordTemplateGroupBO);

    /**
     * 删除
     *
     * @param recordTemplateGroupId
     * @return
     */
    Result<?> deleteRecordTemplateGroup(Long recordTemplateGroupId);

    /**
     * 查找多条
     *
     * @param recordTemplateId
     * @return
     */
    List<RecordTemplateGroupBO> listRecordTemplateGroupByTemplateId(Long recordTemplateId, boolean withItem);

    Map<Long, List<GetRecordTemplateGroupResponse>> groupRecordTemplateGroupByTemplateId(List<Long> recordTemplateIdList, boolean withItem);

    /**
     * 保存
     *
     * @param recordTemplateItemBO
     */
    Result<?> saveRecordTemplateItem(RecordTemplateItemBO recordTemplateItemBO);

    /**
     * 复制
     *
     * @param request
     */
    Result<?> copyRecordTemplate(GetRecordTemplateRequest request);
    Result<?> copyRecordTemplateGroup(GetRecordTemplateGroupRequest request);

    /**
     * 保存模板项图片
     *
     * @param request
     */
    Result<?> saveRecordTemplateItemPicture(MultipartHttpServletRequest request);

    /**
     * 更新
     *
     * @param recordTemplateItemBO
     */
    Result<?> updateRecordTemplateItem(RecordTemplateItemBO recordTemplateItemBO);

    /**
     * 删除
     *
     * @param recordTemplateItemId
     * @return
     */
    Result<?> deleteRecordTemplateItem(Long recordTemplateItemId);

    /**
     * 更新排序
     *
     * @param request
     * @return
     */
    Result<?> updateRecordTemplateSequence(UpdateRecordTemplateSequenceRequest request);

}
